In many communication systems, packets of data are transmitted over various types of communication channels between various devices. A data packet usually includes a header, data area, and a trailer, wherein the header contains information that directs the packet to the correct receiver or receivers. The header may also include information that can be used to determine a number of packets being transmitted within a data stream. For example, a sequence number may be used for each packet to indicate the sequence of the packet within the stream. Because of any number of problems that may be encountered in a communication system, however, some packets of data do not reach their intended destinations. When the receiver does not receive certain packets or a certain number of packets as indicated in the header or headers, which can be determined from the sequence numbers, for example, the receiver can determine which packets were missed or the number of packets that were missed. As a result of a receiver missing a number of packets and the information not reaching its intended destination, the integrity of the signals and the communication system as a whole is compromised.
One solution for handling the problem of missed packets is to send “forward error correction” (FEC) code corresponding to the data. The FEC code is typically transmitted immediately after the transmission of data and is applied on a different multicast channel. Depending on the amount of FEC code that is transmitted with the data, the receiver can handle a certain number of missed packets. If a device receiving the data and FEC determines that it missed one or more packets, then the device uses the FEC code to attempt to correct the missing packets and fill in the gaps. If the amount of FEC code is not enough to correct all the errors, the receiver corrects as much as possible and forwards the data stream, with some missing packets, to the next device. In this respect, incomplete data can be transmitted through the communication system, which is undesirable. Also, many receivers do not contain enough memory to handle a larger amount of FEC.
Another solution for handling the problem of missed packets is to allow a receiving device to request for a “re-transmission” of the missed packets. In this case, when a receiver realized that it missed one or more packets, it can send a re-transmission request back to the sender. The sender can then transmit a unicast transmission of the missing packets to the receiver. Although this technique may be acceptable when one receiver requests re-transmission, it may experience difficulties when used in a multicast environment. If a sender transmits copies of the data packets to multiple receivers, the sender may also receive numerous re-transmission requests from multiple receivers, especially if there is a widespread problem affecting many transmissions. Too many requests in this situation can overwhelm the sender. Also, it is difficult for a sender to handle such a large number of requests while at the same time maintain state for all the receivers. An edge device transmitting to multiple receivers in a multicast environment may therefore need to contain complex re-transmission circuitry to handle a potentially large number of requests. Thus, a need exists to address these and other deficiencies and inadequacies of the present technologies to provide forward error correction in a more efficient and less complex manner.